cmd: gpt: backup boot code before writing MBR
authorVincent Tinelli <[email protected]>
Mon, 30 Jan 2017 12:46:07 +0000 (15:46 +0300)
committerTom Rini <[email protected]>
Wed, 8 Feb 2017 20:56:29 +0000 (15:56 -0500)
On some cases the first 440 bytes of MBR are used to keep an additional
information for ROM boot loader. 'gpt write' command doesn't preserve
that area and makes boot code gone.

Preserve boot code area when run 'gpt write' command.

Signed-off-by: Vincent Tinelli <[email protected]>
Signed-off-by: Brennan Ashton <[email protected]>
Signed-off-by: Andy Shevchenko <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
disk/part_efi.c

index b5928e5abec2018f92c852a26770084aba82d144..893cbbdbdaeb5cdbac23b1e24ef0bec7819a33bb 100644 (file)
@@ -324,6 +324,13 @@ static int set_protective_mbr(struct blk_desc *dev_desc)
                printf("%s: calloc failed!\n", __func__);
                return -1;
        }
+
+       /* Read MBR to backup boot code if it exists */
+       if (blk_dread(dev_desc, 0, 1, p_mbr) != 1) {
+               error("** Can't read from device %d **\n", dev_desc->devnum);
+               return -1;
+       }
+
        /* Append signature */
        p_mbr->signature = MSDOS_MBR_SIGNATURE;
        p_mbr->partition_record[0].sys_ind = EFI_PMBR_OSTYPE_EFI_GPT;